package com.x_memteor.base_master.utils;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.support.design.internal.SnackbarContentLayout;
import android.support.design.widget.Snackbar;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.x_memteor.base_master.R;

/**
 * Snackbar的工具类
 * addViewToSnackbar()方法：当需要自定义Snackbar时，调用这个方法在Snackbar的布局中添加一个新的控件
 * setAction()方法：为Snackbar中新添加的按钮设置文本和点击事件
 */
public class SnackbarUtil {

    public static final int Info = 1;
    public static final int Confirm = 2;
    public static final int Warning = 3;
    public static final int Alert = 4;


    public static int red = 0xfff44336;
    public static int green = 0xff4caf50;
    public static int blue = 0xff2195f3;
    public static int orange = 0xffffc107;

    /**
     * 短显示Snackbar，自定义颜色
     *
     * @param view
     * @param message
     * @param messageColor
     * @param backgroundColor
     * @return
     */
    public static Snackbar ShortSnackbar(View view, String message, int messageColor, int backgroundColor) {
        Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_SHORT);
        setSnackbarColor(snackbar, messageColor, backgroundColor);
        return snackbar;
    }

    /**
     * 长显示Snackbar，自定义颜色
     *
     * @param view
     * @param message
     * @param messageColor
     * @param backgroundColor
     * @return
     */
    public static Snackbar LongSnackbar(View view, String message, int messageColor, int backgroundColor) {
        Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_LONG);
        setSnackbarColor(snackbar, messageColor, backgroundColor);
        return snackbar;
    }

    /**
     * 自定义时常显示Snackbar，自定义颜色
     *
     * @param view
     * @param message
     * @param messageColor
     * @param backgroundColor
     * @return
     */
    public static Snackbar IndefiniteSnackbar(View view, String message, int duration, int messageColor, int backgroundColor) {
        Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE).setDuration(duration);
        setSnackbarColor(snackbar, messageColor, backgroundColor);
        return snackbar;
    }

    /**
     * 短显示Snackbar，可选预设类型
     *
     * @param view
     * @param message
     * @param type
     * @return
     */
    public static Snackbar ShortSnackbar(View view, String message, int type) {
        Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_SHORT);
        switchType(snackbar, type);
        return snackbar;
    }

    /**
     * 长显示Snackbar，可选预设类型
     *
     * @param view
     * @param message
     * @param type
     * @return
     */
    public static Snackbar LongSnackbar(View view, String message, int type) {
        Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_LONG);
        switchType(snackbar, type);
        return snackbar;
    }

    /**
     * 自定义时常显示Snackbar，可选预设类型
     *
     * @param view
     * @param message
     * @param type
     * @return
     */
    public static Snackbar IndefiniteSnackbar(View view, String message, int duration, int type) {
        Snackbar snackbar = Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE).setDuration(duration);
        switchType(snackbar, type);
        return snackbar;
    }

    //选择预设类型
    private static void switchType(Snackbar snackbar, int type) {
        switch (type) {
            case Info:
                setSnackbarColor(snackbar, blue);
                break;
            case Confirm:
                setSnackbarColor(snackbar, green);
                break;
            case Warning:
                setSnackbarColor(snackbar, orange);
                break;
            case Alert:
                setSnackbarColor(snackbar, Color.YELLOW, red);
                break;
        }
    }

    /**
     * 设置Snackbar背景颜色
     *
     * @param snackbar
     * @param backgroundColor
     */
    public static void setSnackbarColor(Snackbar snackbar, int backgroundColor) {
        View view = snackbar.getView();
        if (view != null) {
            view.setBackgroundColor(backgroundColor);
        }
    }

    /**
     * 设置Snackbar文字和背景颜色
     *
     * @param snackbar
     * @param messageColor
     * @param backgroundColor
     */
    public static void setSnackbarColor(Snackbar snackbar, int messageColor, int backgroundColor) {
        View view = snackbar.getView();
        if (view != null) {
            view.setBackgroundColor(backgroundColor);
            ((TextView) view.findViewById(R.id.snackbar_text)).setTextColor(messageColor);
        }
    }

    /**
     * 向Snackbar中添加view
     *
     * @param snackbar
     * @param layoutId
     * @param index    新加布局在Snackbar中的位置
     */
    public static void SnackbarAddView(Snackbar snackbar, int layoutId, int index) {

        // 获取snackbar的View（实就是SnackbarLayout）
        View snackbarview = snackbar.getView();
        // 将获取的View转换成SnackbarLayout
        //25.0.0版本下通过下面这句话
//        Snackbar.SnackbarLayout snackbarLayout = (Snackbar.SnackbarLayout) snackbarview;
        //25.0.0之上版本通过下面这句话
        SnackbarContentLayout contentLayout = (SnackbarContentLayout) ((Snackbar.SnackbarLayout) snackbarview).getChildAt(0);
        // 加载布局文件新建View
        View add_view = LayoutInflater.from(snackbarview.getContext()).inflate(layoutId, null);
        // 设置新建布局参数
        LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        // 设置新建布局在Snackbar内垂直居中显示
        p.gravity = Gravity.CENTER_VERTICAL;
        // 将新建布局添加进snackbarLayout相应位置
        contentLayout.addView(add_view, index, p);
    }

    /**
     * 为Snackbar中新添加的按钮设置文本和点击事件
     *
     * @param snackbar        Snackbar对象
     * @param btn_id          新添加的按钮的ID
     * @param action_string   新添加的按钮中展示的文本
     * @param onClickListener 新添加的按钮的点击事件
     */
    public static void setAction(Snackbar snackbar, int btn_id, String action_string, View.OnClickListener onClickListener) {
        View view = snackbar.getView();//获取Snackbar的view
        if (view != null) {
            //为添加的按钮设置监听器
            ((Button) view.findViewById(btn_id)).setText(action_string);
            (view.findViewById(btn_id)).setOnClickListener(onClickListener);
        }
    }

    /**
     * 为Snackbar中新添加的ImageView设置展示的图片资源ID
     *
     * @param snackbar Snackbar对象
     * @param iv_id    ImageView的ID
     * @param res_id   要在ImageView中展示的图片的资源ID
     */
    public static void setImageAction(Snackbar snackbar, int iv_id, int res_id) {
        View view = snackbar.getView();//获取Snackbar的view
        if (view != null) {
            //为添加的按钮设置监听器
            ((ImageView) view.findViewById(iv_id)).setImageResource(res_id);
        }
    }


    /**
     * 简单的显示一个Snackbar
     *
     * @param view
     * @param message
     */
    public static void showSnackbar(View view, String message) {
        Snackbar.make(view, message, Snackbar.LENGTH_SHORT).show();
    }

}